package com.qt.dao.action;

import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;

import java.util.List;
import java.util.Map;

/**
 * 通用数据修改方法
 *
 * @author symbol
 */
public class ActionDao {
    
    public static final ActionDao DAO = new ActionDao();
    
    /**
     * 通用添加数据的方法
     *
     * @param table  表名
     * @param record 对象
     * @return
     */
    public boolean add_action(String table, Record record) {
        return Db.save(table, record);
    }
    
    /**
     * 通用修改数据的方法
     *
     * @param table  表名
     * @param record 对象
     * @return
     */
    public boolean up_action(String table, Record record) {
        return Db.update(table, record);
    }
    
    /**
     * 批处理修改方法
     *
     * @param table 表名
     * @param list  record集合
     * @return
     */
    public int up_batch(String table, List<Record> list) {
        int size = list.size();
        return Db.batchUpdate(table, list, size).length;
    }
    
    /**
     * 需要用到SQL的修改方法
     *
     * @param table    表名
     * @param mapvalue 欲修改的字段和值[里面必须存在值]
     * @param mapCond  限制条件
     * @return
     */
    public boolean up_action(String table, Map<String, Object> mapvalue, Map<String, Object> mapCond) {
        String sql = "UPDATE " + table + " SET ";
        
        StringBuffer para = new StringBuffer();
        //遍历欲修改的值
        for (Map.Entry<String, Object> entry : mapvalue.entrySet()) {
            sql += entry.getKey() + " = ?,";
            para.append(entry.getValue()).append("æ");
        }
        //清理最后一个逗号
        sql = sql.substring(0, sql.length() - 1);
        
        //遍历条件
        if (mapCond.size() > 0) {
            sql += " WHERE ";
        }
        for (Map.Entry<String, Object> entry : mapCond.entrySet()) {
            sql += entry.getKey() + " = ? AND ";
            para.append(entry.getValue()).append("æ");
        }
        if (mapCond.size() > 0) {
            sql = sql.substring(0, sql.length() - 4);
            String temp = para.toString();
            temp = temp.substring(0, temp.length() - 1);
            para = new StringBuffer().append(temp);
        }
        Object[] temp = para.toString().split("æ");
        return Db.update(sql, temp) > 0;
    }
    
    /**
     * 基于ID删除数据
     * @param table 表名
     * @param record
     * @return
     */
    public boolean del_objId(String table,int id){
        Record record = new Record();
        record.set("id",id);
        return Db.delete(table, record);
    }
    
}
